#include <stdio.h>
#include <sys/timerfd.h>
#include <unistd.h>
#include <stdint.h>

int main()
{
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0); // CLOCK_MONOTONIC参数表示不受系统时间的限制，以系统启动时间为基准
    if(timerfd < 0)
    {
        perror("timerfd fail!");
        return -1;
    }
    // timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);
    struct itimerspec itim;
    itim.it_value.tv_sec = 2;//设置第一次超时的时间
    itim.it_value.tv_nsec = 0;
    itim.it_interval.tv_sec = 3;//第一次之后，每一次的超时时间
    itim.it_interval.tv_nsec = 0;

    timerfd_settime(timerfd, 0, &itim, NULL);
    while(true)
    {
        //每超时一次，系统会向timerfd这个文件描述符中，写入8字节的数据
        uint64_t times;
        int n = read(timerfd, &times, 8);
        if( n < 0)
        {
            return -1;
        }
        printf("超时 %ld\n", times);
    }
    return 0;
}